// Copyright 2007 the original author or authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package lichen.services.binding;

import java.util.List;

import org.apache.tapestry.Binding;
import org.apache.tapestry.internal.bindings.AbstractBinding;

/**
 * List Binding
 * 
 * @author jcai
 * @version $Revision: 2 $
 * @since 0.0.1
 */
public class ListBinding extends AbstractBinding {
	private final List<Binding> delegates;

	public ListBinding(List<Binding> delegates) {
		this.delegates = delegates;
	}

	public Object get() {
		Object[] valuesFromDelegates = new Object[delegates.size()];

		for (int i = 0; i < delegates.size(); i++) {
			valuesFromDelegates[i] = delegates.get(i).get();
		}

		return valuesFromDelegates;
	}

	@Override
	public boolean isInvariant() {
		return false;
	}

	@Override
	public Class<Object[]> getBindingType() {
		return Object[].class;
	}
}